using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Game;
using GameStates;

/**
 * Logo控制器 (LogoController)
 * 
 * 功能说明：
 * - 用于测试Logo状态的UI控制器
 * - 界面上带一个进度条，用于模拟游戏启动的进度
 * - 当进度达到100%时，自动切换到登录状态
 * 
 * 设计说明：
 * - 继承自MonoBehaviour，作为UI控制器
 * - 使用Unity UI系统显示进度
 * - 通过状态机实现状态切换
 * 
 * 使用场景：
 * - 在Logo场景中使用
 * - 模拟真实的游戏启动流程
 * - 测试状态机切换功能
 */

namespace Tests
{
    public class LogoController : MonoBehaviour
    {
        /**
         * 进度条组件
         * 
         * 说明：
         * - 在Unity编辑器中拖拽赋值
         * - 用于显示加载进度
         * - 值范围：0-1
         */
        [SerializeField]
        public Slider progressBar;

        /**
         * 进度文本组件
         * 
         * 说明：
         * - 在Unity编辑器中拖拽赋值
         * - 显示百分比进度
         * - 使用TextMeshPro组件
         */
        [SerializeField]
        public TextMeshProUGUI progressText;

        /**
         * 模拟的加载时长
         * 
         * 说明：
         * - 在Unity编辑器中可调整
         * - 控制进度条完成的时间
         * - 默认3秒完成
         */
        [SerializeField]
        public float loadDuration = 3f;

        /**
         * 累积加载时长
         * 
         * 说明：
         * - 记录已经加载的时间
         * - 用于计算当前进度
         * - 每帧累加Time.deltaTime
         */
        private float _loadTime = 0;

        /**
         * Unity生命周期：Start方法
         * 
         * 功能：
         * - 初始化进度条和文本
         * - 设置初始进度为0
         * - 准备开始加载动画
         */
        void Start()
        {
            Debug.Log("TestLogoController: 开始初始化Logo测试界面");

            // 初始化进度条
            progressBar.value = 0;
            progressText.text = "0%";

            Debug.Log("TestLogoController: Logo测试界面初始化完成");
        }

        /**
         * Unity生命周期：Update方法
         * 
         * 功能：
         * - 每帧更新加载进度
         * - 更新进度条和文本显示
         * - 检查是否完成加载，切换状态
         */
        void Update()
        {
            if (GameApp.Instance == null || !GameApp.Instance.IsInitialized)
            {
                return;
            }

            // 如果进度已经完成，不再更新
            if (progressBar.value >= 1)
            {
                return;
            }

            // 累加加载时间
            _loadTime += Time.deltaTime;

            // 计算当前进度（0-1之间）
            var currentProgress = _loadTime / loadDuration;

            // 更新进度条显示
            progressBar.value = currentProgress;

            // 更新进度文本，显示百分比
            progressText.text = $"{(currentProgress * 100):F0}%";

            // 检查是否完成加载
            if (currentProgress >= 1)
            {
                Debug.Log("TestLogoController: 加载完成，切换到登录状态");

                // 加载完成，切换到登录状态
                // 通过GameApp单例访问状态机
                GameApp.Instance.StateMachine.ChangeState(new GameStateLogin());
            }
        }
    }

}